現代 C++(C++11/14/17)引入了 零成本抽象 用以彌補底層硬體控制與高階可讀性之間的差距。透過確定性的記憶體管理達成效率,而表現力則藉由編譯時期邏輯得以提升。
1. 記憶體配置:std::array 與 std::vector
std::array 是對傳統 C 風格陣列的現代封裝,配置在 堆疊 上,其大小在編譯時期即已固定。相反地, std::vector 位於 堆 並動態增長。雖然 std::vector 採用幾何增長倍率(通常為 $1.5\times$ 或 $2\times$),但現代 C++ 提供了 shrink_to_fit() 來回收未使用的容量,提供比像 Go 這類受控語言更精細的控制能力。
2. SFINAE 與類型安全性
透過 std::enable_if 以及 std::is_enum,開發者可以實現 取代失敗非錯誤(SFINAE)。這讓編譯器能在編譯時期根據類型特性選擇特定的函數重載,例如利用其 std::underlying_type來為列舉型別建立通用的輸出運算子。
// C++11 記憶體管理重點
v.push_back(std::move(obj)); // 移動語意
arr.at(0); // 範圍檢查
v.push_back(std::move(obj)); // 移動語意
arr.at(0); // 範圍檢查
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>